import CryptoJS from 'crypto-js';

/**
 * MD5 加密
 * @param {string} text 待加密的文本
 * @returns {string} 加密后的 MD5 字符串
 */
export function md5Encrypt(text) {
    return CryptoJS.MD5(text).toString();
}

/**
 * SHA256 加密
 * @param {string} text 待加密的文本
 * @returns {string} 加密后的 SHA256 字符串
 */
export function sha256Encrypt(text) {
    return CryptoJS.SHA256(text).toString();
}

/**
 * AES 加密
 * @param {string} text 待加密的文本
 * @param {string} secretKey 密钥
 * @returns {string} 加密后的密文
 */
export function aesEncrypt(text, secretKey) {

    const ciphertext = CryptoJS.AES.encrypt(text, secretKey).toString();
    return ciphertext;
}

/**
 * AES 解密
 * @param {string} ciphertext 加密的密文
 * @param {string} secretKey 密钥
 * @returns {string} 解密后的明文
 */
export function aesDecrypt(ciphertext, secretKey) {
    const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
    const originalText = bytes.toString(CryptoJS.enc.Utf8);
    return originalText;
}

/**
 * Base64 编码
 * @param {string} text 待编码的文本
 * @returns {string} Base64 编码后的字符串
 */
export function base64Encode(text) {
    const encoded = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
    return encoded;
}

/**
 * Base64 解码
 * @param {string} encodedText Base64 编码后的字符串
 * @returns {string} 解码后的明文
 */
export function base64Decode(encodedText) {
    const decoded = CryptoJS.enc.Base64.parse(encodedText).toString(CryptoJS.enc.Utf8);
    return decoded;
}

/**
 * HMAC-SHA256 签名
 * @param {string} text 待签名的文本
 * @param {string} secretKey 密钥
 * @returns {string} 签名后的字符串
 */
export function hmacSha256(text, secretKey) {
    const signature = CryptoJS.HmacSHA256(text, secretKey).toString();
    return signature;
}

/**
 * 随机生成密钥
 * @param {number} length 密钥长度
 * @returns {string} 随机密钥
 */
export function generateRandomKey(length = 16) {
    return CryptoJS.lib.WordArray.random(length).toString();
}
